package com.lu.app

import android.app.Application
import android.widget.ImageView
import coil.load
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.facebook.drawee.backends.pipeline.Fresco
import com.lu.library.CommLibInit
import com.squareup.picasso.Picasso
import dagger.hilt.android.HiltAndroidApp

/**
 * 1. 所有使用 Hilt 的 App 必须包含一个使用 @HiltAndroidApp 注解的 Application
 * 2. @HiltAndroidApp 将会触发 Hilt 代码的生成，包括用作应用程序依赖项容器的基类
 * 3. 生成的 Hilt 组件依附于 Application 的生命周期，它也是 App 的父组件，提供其他组件访问的依赖
 * 4. 在 Application 中设置好 @HiltAndroidApp 之后，就可以使用 Hilt 提供的组件了，
 *    Hilt 提供的 @AndroidEntryPoint 注解用于提供 Android 类的依赖（Activity、Fragment、View、Service、BroadcastReceiver）等等
 *    Application 使用 @HiltAndroidApp 注解
 */
@HiltAndroidApp
class LApplication : Application() {
//    private val appInits = mutableListOf(
//        CommonInit::class.java.name,
//        MainInit::class.java.name,
//        "com.hjq.demo.app.LunInit",
//        "com.dodola.jvmtilib.JVMTIHelper"
//    )
    companion object{
        var start = 0L
    }

    //    @Inject
//    lateinit var hiltDemo: HiltDemo
    override fun onCreate() {
        super.onCreate()
        start = System.currentTimeMillis()
//        LogUtils.getConfig().setBorderSwitch(false)
        initOther()
        initARouter()
        CommLibInit.onInit(this)
//        Glide.with(this).applyDefaultRequestOptions(RequestOptions().useUnlimitedSourceGeneratorsPool(true)).load("").into()
//        Picasso.get().load("").into("")
//        Fresco.initialize(this);
        ImageView(this).load("")
    }
    private fun initARouter(){
//        ARouter.init(this)
//        ARouter.openDebug()
//        ARouter.openLog()
    }
    private fun initOther() {

//        LogUtils.d(ServiceLoader.load(AbsInit::class.java).count())
//        ServiceLoader.load(AbsInit::class.java).forEach {
//            LogUtils.d(it.javaClass.name)
//            it.onInit(this)
//        }
//
//        appInits.map {
//            runCatching {
//                Class.forName(it)
//            }
//        }.filter { it.isSuccess }.map { it.getOrNull() }.forEach {
//            val o = (it!!.newInstance())
//            if (o is AbsInit) {
//                o.onInit(LApplication@ this)
//            }else{
//                ReflectUtils.reflect(o).method("onInit",LApplication@this)
//            }
//        }
    }

}